本日、NGINX Open Source 1.15.2の提供開始を発表いたします。このリリースの主な新機能の1つは、新しい$ssl_preread_protocol変数です。この変数を使用すると、TCP(stream)プロキシでトラフィックを転送する際に、SSL/TLSとその他のプロトコルを区別できます。これは、たとえばSSL/TLSサービスとSSHサービスを同じポートで実行し、ファイアウォールの制限を回避したい場合に役立ちます。
この新機能は、今後リリース予定の「NGINX Plus R16」でもNGINX Plusのお客さまにご利用いただけるようになります。
使用するタイミングと方法:$ssl_preread_protocol
When you terminate and decrypt SSL/TLS traffic, with either the httpまたはstreamモジュールでSSL/TLSトラフィックを終端して復号する場合、$ssl_protocol(http、stream)変数には、クライアントが使用するSSLまたはTLSのバージョンが格納されます。ただし、streamモジュールで基本的なTCPプロキシまたはロードバランサーを実装し、SSL/TLSトラフィックを復号せずにそのまま転送したい場合もあります。
The stream_ssl_prereadモジュールは、SSLまたはTLS接続の最初のClientHelloメッセージを検査し、接続の管理に使用できる複数の値を抽出します。リリース1.15.2で追加された$ssl_preread_protocol変数は、client_versionフィールドから最新のSSL/TLSバージョン番号を取得します。ClientHelloメッセージにsupported_versions拡張が含まれている場合、変数はClientHello message, then the variable is set to TLSv1.3に設定されます。
接続でSSLまたはTLSのいずれのバージョンも使用していない場合、$ssl_preread_protocol変数は空になります。これは、接続でSSHなど、SSL/TLS以外のプロトコルが使用されていることを示します。
次の設定スニペットでは、接続で使用されているプロトコルに適したアップストリームグループの名前を$ssl_preread_protocol変数に基づいて設定するため、mapブロックで$upstream変数を使用します。その後、proxy_passディレクティブによって、リクエストが選択されたアップストリームグループに転送されます。$ssl_preread_protocol変数を機能させるには、ssl_preread onディレクティブをserverブロックに含める必要があります。
stream { upstream ssh {
server 192.0.2.1:22;
}
upstream web {
server 192.0.2.2:443;
}
map $ssl_preread_protocol $upstream {
default ssh;
"TLSv1.2" web;
}
# SSH and SSL on the same port
server {
listen 443;
proxy_pass $upstream;
ssl_preread on;
}
}この設定を有効にするには、クライアントがデフォルトのポート22ではなく、ポート443でSSHサーバーにアクセスする必要があります。たとえば、MacOSおよびLinuxに組み込まれているSSHクライアントでは、-pフラグを使用してポートを変更できます。
$ ssh ssh-server-ip-address -p 443最新バージョンのNGINXを入手する方法
NGINXの最新バージョンは、常に公式リポジトリのmainlineブランチで入手できます。
詳細はこちら
NGINX Open Source 1.15.2には、追加の機能強化とバグ修正が含まれています。新機能の完全な一覧については、NGINX変更履歴をご覧ください。
著者について

関連するブログ記事
チュートリアル:NGINXを使用してアプリケーション向けにOpenTelemetryを構成する
OpenTelemetryを使用してNGINXサーバーの状態と健全性をより明確に把握することで、問題のトラブルシューティングを行い、Webアプリケーションのパフォーマンスを向上できます。
AkitaのNGINX Plus認定モジュールでAPIエンドポイントの問題を特定・修正
Akita SoftwareのAPIオブザーバビリティ向け新しいNGINX Plus Certified Moduleを活用して、APIエンドポイントの問題をより迅速に特定し、修正できます。
JavaプロジェクトをスキャフォールディングしてKubernetesネイティブアプリを構築する方法
Red HatのシニアプリンシパルデベロッパーアドボケイトであるDaniel Oh氏が、Javaプロジェクトをゼロから構築するためのひな形を作成し、Kubernetesネイティブアプリケーションとしてビルドする方法を解説します。
F5 NGINXaaS for Azureのご紹介:Microsoft Azureでネイティブに利用できるSaaS型ロードバランシング
NGINXaaS for Azureは、NGINX PlusをAzureネイティブのSaaSとして利用できるサービスです。NGINXの設定を容易にリフト&シフトできるため、クラウド導入とモダンアプリの展開を加速できます。

SELinuxでNGINXおよびNGINX Plusを使用する
Red Hat Enterprise Linux(RHEL)および関連ディストリビューションでSecurity-Enhanced Linux(SELinux)を有効にすると、デフォルト設定によりNGINXとNGINX Plusの一部の操作が制限されます。この記事では、すべての機能を利用できるようにSELinuxの設定を変更する方法について説明します。
NGINX PlusによるAWS Auto Scalingグループの負荷分散
新しいnginx-asg-sync統合ソフトウェアにより、NGINX PlusはAWS Auto Scalingグループの負荷を直接分散できるため、クラウドでの負荷分散がさらに柔軟になります